***************
* Information *
***************

* This do-file reproduces codings and analyses for the US study in the manuscript, Reproductive
* Interests and Dimensions of Political Ideology, published in Evolution and 
* Human Behavior.
* The do-file is designed to work with the data file, Replication Data - US Study.dta

*************
* Recodings *
*************

* Generation of SOI measure

mvdecode q9_1 q9_2 q9_3, mv(8)
alpha q9_1 q9_2 q9_3, gen (SOIatt)
zscore SOIatt

destring q11t, generate(q11trc) force
destring q12t, generate(q12trc) force
destring q13t, generate(q13trc) force
				
replace q11trc=	0 if q11t=="0"
replace q11trc=	1 if q11t=="1"
replace q11trc=	1 if q11t=="1 just my husband"
replace q11trc=	1 if q11t=="1 my boyfriend"
replace q11trc=	1 if q11t=="1 my husband"
replace q11trc=	1 if q11t=="1 my wife"
replace q11trc=	1 if q11t=="1 my wife only"
replace q11trc=	1 if q11t=="1 total - my wife"
replace q11trc=	1 if q11t=="1 wife"
replace q11trc=	1000 if q11t=="1,000"
replace q11trc=	10 if q11t=="10"
replace q11trc=	100 if q11t=="100+"
replace q11trc=	11 if q11t=="11"
replace q11trc=	12 if q11t=="12"
replace q11trc=	15 if q11t=="15"
replace q11trc=	2 if q11t=="2"
replace q11trc=	20 if q11t=="20"
replace q11trc=	25 if q11t=="25"
replace q11trc=	27 if q11t=="27"
replace q11trc=	3 if q11t=="3"
replace q11trc=	30 if q11t=="30"
replace q11trc=	4 if q11t=="4"
replace q11trc=	5 if q11t=="5"
replace q11trc=	6 if q11t=="6"
replace q11trc=	69 if q11t=="69"
replace q11trc=	7 if q11t=="7"
replace q11trc=	8 if q11t=="8"
replace q11trc=	9 if q11t=="9"
replace q11trc=	9000 if q11t=="9000"
replace q11trc=	1 if q11t=="I'm married"
replace q11trc=	0 if q11t=="still virgin and prefer to keep i.."
replace q11trc=	1 if q11t=="My hubby"
replace q11trc=	0 if q11t=="NONE"
replace q11trc=	0 if q11t=="None"
replace q11trc=	0 if q11t=="None/does not apply"
replace q11trc=	1 if q11t=="One"
replace q11trc=	1 if q11t=="Only my husband"
replace q11trc=	1 if q11t=="Only my spouse"
replace q11trc=	1 if q11t=="Only my wife for 25 years"
replace q11trc=	2 if q11t=="Two"
replace q11trc=	0 if q11t=="Zero"
replace q11trc=	1 if q11t=="con mi esposo"
replace q11trc=	. if q11t=="de"
replace q11trc=	. if q11t=="frf"
replace q11trc=	1 if q11t=="husband"
replace q11trc=	1 if q11t=="just my husband"
replace q11trc=	1 if q11t=="just my partner"
replace q11trc=	1 if q11t=="just my wife"
replace q11trc=	1 if q11t=="just one- my husband"
replace q11trc=	1 if q11t=="just with my husband 1"
replace q11trc=	1 if q11t=="my husband"
replace q11trc=	1 if q11t=="my wife"
replace q11trc=	0 if q11t=="never"
replace q11trc=	0 if q11t=="none"
replace q11trc=	0 if q11t=="none have been sex free for 3 years"
replace q11trc=	. if q11t=="not enough"
replace q11trc=	. if q11t=="not many"
replace q11trc=	0 if q11t=="nothing"
replace q11trc=	0 if q11t=="o"
replace q11trc=	1 if q11t=="one"
replace q11trc=	1 if q11t=="one my spouse"
replace q11trc=	1 if q11t=="one, my husband"
replace q11trc=	1 if q11t=="only by husband for 37 years"
replace q11trc=	1 if q11t=="only my wife"
replace q11trc=	1 if q11t=="only one"
replace q11trc=	2 if q11t=="two"
replace q11trc=	0 if q11t=="zero"

replace q12trc=0 if q12t=="0"
replace q12trc=1 if q12t=="1"
replace q12trc=1 if q12t=="1 ( if I am married)"
replace q12trc=1 if q12t=="1 I dont see myself with anyone but m.."
replace q12trc=1 if q12t=="1 just my husband"
replace q12trc=1 if q12t=="1 my husband"
replace q12trc=1 if q12t=="1 my w ife only"
replace q12trc=1 if q12t=="1 or none- losing interest despite of.."
replace q12trc=1 if q12t=="1 total - my w ife"
replace q12trc=1 if q12t=="1 unless we have A 3way ;)"
replace q12trc=1 if q12t=="1, my husband. I am not a pig."
replace q12trc=2 if q12t=="1-2"
replace q12trc=10 if q12t=="10"
replace q12trc=100 if q12t=="100"
replace q12trc=1000 if q12t=="1000"
replace q12trc=100000000000 if q12t=="100000000000"
replace q12trc=11 if q12t=="11"
replace q12trc=12 if q12t=="12"
replace q12trc=15 if q12t=="15"
replace q12trc=17 if q12t=="17"
replace q12trc=1 if q12t=="1?"
replace q12trc=2 if q12t=="2"
replace q12trc=4 if q12t=="2-4"
replace q12trc=20 if q12t=="20"
replace q12trc=20000 if q12t=="20,000"
replace q12trc=25 if q12t=="25"
replace q12trc=3 if q12t=="3"
replace q12trc=30 if q12t=="30"
replace q12trc=35 if q12t=="35"
replace q12trc=4 if q12t=="4"
replace q12trc=40 if q12t=="40"
replace q12trc=5 if q12t=="5"
replace q12trc=5 if q12t=="5 d ifferent partners"
replace q12trc=50 if q12t=="50"
replace q12trc=6 if q12t=="6"
replace q12trc=7 if q12t=="7"
replace q12trc=8 if q12t=="8"
replace q12trc=80 if q12t=="80"
replace q12trc=9 if q12t=="9"
replace q12trc=. if q12t=="?"
replace q12trc=. if q12t=="Don't Know"
replace q12trc=. if q12t=="I don't believe in sex outside of mar.."
replace q12trc=. if q12t=="I don't see that love my husband"
replace q12trc=1 if q12t=="Just my husband"
replace q12trc=1 if q12t=="Just my spouse"
replace q12trc=1 if q12t=="Maybe one, but I have been celibate f.."
replace q12trc=1 if q12t=="My spouse"
replace q12trc=0 if q12t=="NONE"
replace q12trc=0 if q12t=="None"
replace q12trc=1 if q12t=="ONE"
replace q12trc=1 if q12t=="One"
replace q12trc=1 if q12t=="One,  if I am married to him."
replace q12trc=1 if q12t=="Only my husband"
replace q12trc=2 if q12t=="Two"
replace q12trc=. if q12t=="Who knows"
replace q12trc=0 if q12t=="Zero"
replace q12trc=0 if q12t=="absolutely none, I don't want sex in .."
replace q12trc=. if q12t=="as many as i can"
replace q12trc=1 if q12t=="con mi esposo"
replace q12trc=. if q12t=="doggystile"
replace q12trc=. if q12t=="don't know"
replace q12trc=. if q12t=="dont know"
replace q12trc=. if q12t=="ff"
replace q12trc=1 if q12t=="husband"
replace q12trc=1 if q12t=="in less i am married none"
replace q12trc=1 if q12t=="just my spouse"
replace q12trc=1 if q12t=="just my wife"
replace q12trc=1 if q12t=="just one"
replace q12trc=1 if q12t=="maybe 1"
replace q12trc=1 if q12t=="maybe one if I get married other wise.."
replace q12trc=1 if q12t=="my husband"
replace q12trc=1 if q12t=="my husband only"
replace q12trc=1 if q12t=="my partner only"
replace q12trc=1 if q12t=="my wife"
replace q12trc=. if q12t=="no idea"
replace q12trc=0 if q12t=="no never"
replace q12trc=0 if q12t=="none"
replace q12trc=. if q12t=="not enough"
replace q12trc=. if q12t=="not sure"
replace q12trc=0 if q12t=="nothing"
replace q12trc=0 if q12t=="o"
replace q12trc=1 if q12t=="one"
replace q12trc=2 if q12t=="one maybe two"
replace q12trc=1 if q12t=="one my wife"
replace q12trc=1 if q12t=="one, my husband"
replace q12trc=1 if q12t=="only my husban"
replace q12trc=1 if q12t=="only my wife"
replace q12trc=1 if q12t=="only one"
replace q12trc=3 if q12t=="three"
replace q12trc=2 if q12t=="two"
replace q12trc=. if q12t=="w emn"
replace q12trc=0 if q12t=="zero"

replace q13trc = 0 if q13t == ".0"
replace q13trc = 10 if q13t == "10 +"
replace q13trc = 15 if q13t =="10-15"
replace q13trc = 3 if q13t == "2 or 3"
replace q13trc = 20 if q13t == "20 plus"
replace q13trc = 25 if q13t == "25-maybe more"
replace q13trc = 4 if q13t == "3 or 4"
replace q13trc = 6 if q13t == "5-6"
replace q13trc = 30 if q13t == "Around 30"
replace q13trc = 50 if q13t == "Before marriage - between 35 - 50"
replace q13trc = 4 if q13t =="Four"
replace q13trc = 10 if q13t =="I can't remember, but maybe around 10?"
replace q13trc = 0 if q13t =="NONE"
replace q13trc = 0 if q13t =="None"
replace q13trc = 1 if q13t =="One"
replace q13trc = 0 if q13t =="Zero"
replace q13trc = 1 if q13t =="`1"
replace q13trc = 100 if q13t == "about 100"
replace q13trc = 5 if q13t =="five"
replace q13trc = 4 if q13t =="four"
replace q13trc = 0 if q13t =="none"
replace q13trc = 0 if q13t =="nothing"
replace q13trc = 1 if q13t =="one"
replace q13trc = 7 if q13t =="seven"
replace q13trc = 6 if q13t =="six"
replace q13trc = 0 if q13t =="still a virgin, so none"
replace q13trc = 10 if q13t =="ten"
replace q13trc = 2 if q13t =="two"
replace q13trc = 0 if q13t =="zero"

gen q11trc2=q11trc
replace q11trc2=9 if q11trc2>9
replace q11trc2=. if q11trc==.

gen q12trc2=q12trc
replace q12trc2=15 if q12trc2>15
replace q12trc2=. if q12trc==.

gen q13trc2=q13trc
replace q13trc2=15 if q13trc2>15
replace q13trc2=. if q13trc==.

zscore q11trc2 q12trc2 q13trc2

mvdecode q10, mv(9)
zscore q10

alpha z_q11trc2 z_q12trc2 z_q13trc2 z_SOIatt z_q10, gen(SOI) casewise
summarize SOI
gen SOI_01 = (SOI - r(min))/(r(max) - r(min)) 

summarize SOI_01

* Generation of RWA measure

alpha q15_1 q15_2 q15_3 q15_4 q15_5 q15_6 q15_7 q15_8, gen(RWA)
sum RWA
gen RWA01=(((RWA+2.875)/(2.875+7))-1)*-1
sum RWA01

* Generation of SDO measure

alpha q14_1 q14_2 q14_3 q14_4 q14_5 q14_6 q14_7 q14_8, gen(SDO)
sum SDO
gen SDO01=(((SDO+7)/14)-1)*-1
sum SDO01

* Generation of SDO-D and SDO-E

alpha q14_1 q14_2 q14_3 q14_4, gen(SDO_D)
alpha q14_5 q14_6 q14_7 q14_8, gen(SDO_E)

sum SDO_D SDO_E
gen SDO_D01=(SDO_D+7)/14
gen SDO_E01=(SDO_E+7)/14

* Generation of ideological self-placement (liberal vs. conservative)

ta q19 
gen cons01=(q19-1)/6

* Generation of alternative ideological self-placement (left vs. right)  

ta q22, nolabel
gen ideo01=(q22-1)/10
ta ideo01

* Generation of gender

gen female = gender
recode female (2=1) (1=0)

* Checking of age variable

sum age

* Generation of race

gen white=race
recode white (1=1) (2=0) (3=0) (4=0) (5=0) (6=0)(7=0) (8=0)

* Generation of religiosity 

gen reli01=(q7-1)/6

* Generation of education

ta educ
gen edu01 =(educ-1)/5
ta edu01

* Generation of stable relationship

ta q4
ta q4, nolabel
gen norel01=q4-1

* Generation of personality

gen O=((q40a+q40b)/20-1)*-1
gen C=((q40c+q40d)/20-1)*-1 
gen E=((q40e+q40f)/20-1)*-1 
gen A=((q40g+q40h)/20-1)*-1 
gen N=((q40i+q40j)/20-1)*-1 

* Generation of pathogen disgust sensitivity

alpha q24_1 q24_2 q24_3 q24_4 q24_5 q24_6 q24_7, gen(pathogen)
sum pathogen
gen pathogen_01 = (pathogen - r(min))/(r(max) - r(min))
sum pathogen_01

* Checking party identification

ta PID_q27

* Generation of perceived socio-economic status

egen childses=rowmean(q1_1 q1_2 q1_3)
gen childses01=(childses-1)/6

egen adultses=rowmean(q1_4 q1_5 q1_6)
gen adultses01=(adultses-1)/6

* Generation of indicator for whether participant is missing on SOI measure

gen missingSOI=1
replace missingSOI=0 if SOI_01!=.
ta missingSOI

* Rescaling of individual SOI items 

foreach var of varlist z_q11trc2 z_q12trc2 z_q13trc2 z_SOIatt z_q10 {
egen `var'min = min(`var')
egen `var'max = max(`var')
gen `var'01 = (`var' - `var'min) / (`var'max - `var'min)
drop `var'max `var'min
}

gen z_q1001R=(z_q1001-1)*-1

************
* Analyses *
************

*** Testing H1 and H2

* Generation of Figure 1, Panel B

eststo clear
reg SOI_01 cons01 female age white reli01 edu01 norel01
margins, dydx(cons01) level(95)
estimates store m1
reg SOI_01 RWA01 SDO01 female age white reli01 edu01 norel01
margins, dydx(RWA01) level(95)
estimates store m2
reg SOI_01 RWA01 SDO01 female age white reli01 edu01 norel01
margins, dydx(SDO01) level(95)
estimates store m3

coefplot (m1, keep("cons01")) (m2, keep("RWA01")) (m3, keep("SDO01")), ///
recast(bar) barw(.70) ciopts(recast(rcap) lpattern(dash) lcolor(black)) citop msize(medlarge) vertical yscale(range(-.4 .4)) ///
title("B. US Representative Sample") ylabel(-.4(.10).4, nogrid) yline(0, lstyle(foreground)) xlabel(none) ytitle("Association with SOI") ///
legend (order(1 3 5) ///
	label(1 "Ideological Self-Placement") ///
	label(3 "RWA") ///
	label(5 "SDO") col(1)) ///
	scheme(s2mono) graphregion(lcolor(black) fcolor(white))
graph display, ysize(3) xsize(2.5)

* Generation of Table 1, Models 3+4

eststo clear
eststo: reg SOI_01 cons01 female age white reli01 edu01 norel01
eststo: reg SOI_01 RWA01 SDO01 female age white reli01 edu01 norel01
eststo: reg SOI_01 RWA01 SDO01 female age white reli01 edu01 norel01 O C E A N pathogen_01 ib3.PID_q27
esttab, b(%5.2f) se(%5.2f), using Table1us.rtf, replace onecell star(* 0.05 ** 0.01 *** 0.001) wide constant r2
eststo clear

* Analysis using alternative ideological self-placement measure

reg SOI_01 ideo01 female age white reli01 edu01 norel01

* Testing H1 and H2 using SEM

sem (SOI_01 <- SDO RWA) /*
*/ (SDO -> q14_1 q14_2 q14_3 q14_4 q14_5 q14_6 q14_7 q14_8) (RWA -> q15_1 q15_2 q15_3 q15_4 q15_5 q15_6 q15_7 q15_8), nocaps latent(RWA SDO) standardize var(RWA@1) var(SDO@1) cov(SDO*RWA) iterate(1000)

matrix b = e(b)

sem (SOI_01 <- SDO RWA female age white reli01 edu01 norel01) /*
*/ (SDO -> q14_1 q14_2 q14_3 q14_4 q14_5 q14_6 q14_7 q14_8) (RWA -> q15_1 q15_2 q15_3 q15_4 q15_5 q15_6 q15_7 q15_8), nocaps latent(RWA SDO) standardize var(RWA@1) var(SDO@1) cov(SDO*RWA) from(b)

* Generation of Table A1, Models 3+4

eststo clear
eststo: reg RWA01 SDO01 SOI_01 female age white reli01 edu01 norel01
eststo: reg SDO01 RWA01 SOI_01 female age white reli01 edu01 norel01
esttab, b(%5.2f) se(%5.2f), using TableA1us.rtf, replace onecell star(* 0.05 ** 0.01 *** 0.001) wide constant r2
eststo clear

* Generation of Table A2

eststo clear
eststo: reg SOI_01 RWA01 SDO_D01 female age white reli01 edu01 norel01
eststo: reg SOI_01 RWA01 SDO_E01 female age white reli01 edu01 norel01
esttab, b(%5.2f) se(%5.2f), using TableA2.rtf, replace onecell star(* 0.05 ** 0.01 *** 0.001) wide constant r2
eststo clear

* Estimating the effect of SDO-D using SEM

sem (SOI_01 <- SDOD RWA) /*
*/ (SDOD -> q14_1 q14_2 q14_3 q14_4) (RWA -> q15_1 q15_2 q15_3 q15_4 q15_5 q15_6 q15_7 q15_8), nocaps latent(RWA SDOD) standardize var(RWA@1) var(SDOD@1) cov(SDOD*RWA) iterate(1000)

matrix b = e(b)

sem (SOI_01 <- SDOD RWA female age white reli01 edu01 norel01) /*
*/ (SDOD -> q14_1 q14_2 q14_3 q14_4) (RWA -> q15_1 q15_2 q15_3 q15_4 q15_5 q15_6 q15_7 q15_8), nocaps latent(RWA SDOD) standardize var(RWA@1) var(SDOD@1) cov(SDOD*RWA) from(b)

*** Testing H3 and H4

* Generation of Table A3, Models 2+3

eststo clear
eststo: reg SOI_01 RWA01 SDO01 female c.RWA01##c.female c.SDO01##c.female age white reli01 edu01 norel01
eststo: reg SOI_01 RWA01 SDO_D01 female c.RWA01##c.female c.SDO_D01##c.female age white reli01 edu01 norel01
esttab, b(%5.2f) se(%5.2f), using TableA3us.rtf, replace onecell star(* 0.05 ** 0.01 *** 0.001) wide constant r2
eststo clear

*** Testing H5

* Generation of Table A5

eststo clear
eststo: reg SOI_01 RWA01 SDO01 female age white reli01 edu01 norel01 adultses01 c.RWA01##c.adultses01 c.SDO01##c.adultses01
eststo: reg SOI_01 RWA01 SDO01 female age white reli01 edu01 norel01 childses01 c.RWA01##c.childses01 c.SDO01##c.childses01
eststo: reg SOI_01 RWA01 SDO_D01 female age white reli01 edu01 norel01 adultses01 c.RWA01##c.adultses01 c.SDO_D01##c.adultses01
eststo: reg SOI_01 RWA01 SDO_D01 female age white reli01 edu01 norel01 childses01 c.RWA01##c.childses01 c.SDO_D01##c.childses01
esttab, b(%5.2f) se(%5.2f), using TableA5.rtf, replace onecell star (* 0.05 ** 0.01 *** 0.001) wide constant r2
eststo clear

*** Analyses of SOI missing data and sub-items

* Generation of Table A6

eststo clear
eststo: logit missingSOI RWA01 SDO01 female age white reli01 edu01 norel01 O C E A N
esttab, b(%5.2f) se(%5.2f), using TableA6.rtf, replace onecell star(* 0.05 ** 0.01 *** 0.001) wide constant pr2
eststo clear

* Generation of Table A7

eststo clear
eststo: reg z_q11trc201 RWA01 SDO01 female age white reli01 edu01 norel01
eststo: reg z_q12trc201 RWA01 SDO01 female age white reli01 edu01 norel01
eststo: reg z_q13trc201 RWA01 SDO01 female age white reli01 edu01 norel01
eststo: reg z_SOIatt01 RWA01 SDO01 female age white reli01 edu01 norel01
eststo: reg z_q1001R RWA01 SDO01 female age white reli01 edu01 norel01
eststo: reg z_q11trc201 RWA01 SDO_D01 female age white reli01 edu01 norel01
eststo: reg z_q12trc201 RWA01 SDO_D01 female age white reli01 edu01 norel01
eststo: reg z_q13trc201 RWA01 SDO_D01 female age white reli01 edu01 norel01
eststo: reg z_SOIatt01 RWA01 SDO_D01 female age white reli01 edu01 norel01
eststo: reg z_q1001R RWA01 SDO_D01 female age white reli01 edu01 norel01
esttab, b(%5.2f) se(%5.2f), using TableA7.rtf, replace onecell star(+ 0.10 * 0.05 ** 0.01 *** 0.001) wide constant r2
eststo clear
 
